package hehe.validation.validator;


import hehe.validation.annotation.*;
import hehe.validation.base.Rule;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 验证器别名
 *<B>说明：</B>
 *<pre>
 * 略
 *</pre>
 *<B>示例：</B>
 *<pre>
 *  略
 *</pre>
 *<B>日志：</B>
 *<pre>
 *  略
 *</pre>
 *<B>注意事项：</B>
 *<pre>
 *  略
 *</pre>
 */
public class ValidAlias
{
    /**
     * 基本类型对应的方法列表
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public static final Map<String,Class> validatorsAlias = new HashMap<String,Class>() {{}};

    /**
     * 注解列表
     *<B>说明：</B>
     *<pre>
     *  基本格式:<注解类>
     *</pre>
     */
    protected static List<Class> annotationsClazz = new ArrayList<Class>(){{
        add(ValidRule.class);
        add(Validator.class);
    }};



    /**
     * 注解类与验证类对应关系列表
     *<B>说明：</B>
     *<pre>
     *  基本格式:<注解类,验证类别名>
     *</pre>
     */
    protected static Map<Class,String> validatorAnnotationRelation = new HashMap<>();

    public static void registerAnnotation(Class annotation)
    {
        annotationsClazz.add(annotation);
    }

    /**
     * 设置Validator别名
     *<B>说明：</B>
     *<pre>
     * 略
     *</pre>
     */
    public static void putValidatorAlias(String alias,Class validator)
    {
        validatorsAlias.put(alias,validator);
    }

    /**
     * 通过别名获取Validator class
     *<B>说明：</B>
     *<pre>
     * 略
     *</pre>
     */
    public static Class getValidator(String alias)
    {
        return validatorsAlias.get(alias);
    }

    /**
     * 设置注解类与验证器别名对应关系
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public static void putValidatorAnnotationRelation(Class annotation,String alias)
    {
        validatorAnnotationRelation.put(annotation,alias);
    }

    /**
     * 获取注解类对应的验证期别名
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public static String getValidatorAnnotation(Class annotation)
    {
        return validatorAnnotationRelation.get(annotation);
    }

    public static List<Class> getAllValidatorsAlias()
    {
        return annotationsClazz;
    }


}
